export type Version = string | number;
export enum VersionIs {
  LessThan = -1,
  EqualTo = 0,
  GreaterThan = 1,
}

/**
 * Compare two versions quickly.
 * @param current Is this version greater, equal to, or less than the other?
 * @param other The version to compare against the current version
 * @return 1 if current is greater than other, 0 if they are equal or equivalent, and -1 if current is less than other
 */
export default function versionCompare(
  current: Version,
  other: Version,
): VersionIs {
  const cp = String(current).split(".");
  const op = String(other).split(".");
  for (let depth = 0; depth < Math.min(cp.length, op.length); depth++) {
    const cn = Number(cp[depth]);
    const on = Number(op[depth]);
    if (cn > on) return VersionIs.GreaterThan;
    if (on > cn) return VersionIs.LessThan;
    if (!isNaN(cn) && isNaN(on)) return VersionIs.GreaterThan;
    if (isNaN(cn) && !isNaN(on)) return VersionIs.LessThan;
  }
  return VersionIs.EqualTo;
}
